﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidad;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace Dao
{
    public class DocenteDao
    {
        private static SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AcademicoConnectionString"].ConnectionString);
        public static SqlCommand cmd;
        public DocenteDao()
        {
         
        }

        public static List<Docente> ObtenerTodo()
        {
            List<Docente> listDocente = new List<Docente>();
            string sql = "select * from Docente";
            try
            {
                cn.Open();
                SqlCommand cmd = new SqlCommand(sql, cn);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Docente doc = new Docente();
                    doc.legDocente = (int)dr["legajo"];
                    doc.nombre = dr["nombre"].ToString();
                    doc.apellido = dr["apellido"].ToString();
                    doc.fechaNac = (DateTime)dr["fechaNac"];
                    doc.email = dr["email"].ToString();
                    doc.cargaHoraria = (int)dr["cargaHoraria"];
                    doc.codProvincia = (int)dr["codProvincia"];
                    doc.pass = dr["pass"].ToString();
                   
                    listDocente.Add(doc);
                }
                dr.Close();
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                throw new ApplicationException("Error BD Docente. \n Problemas: " +ex.Message);
            }
            return listDocente;

        }

        public static List<DocenteGrilla> ObtenerTodoGrilla()
        {
            List<DocenteGrilla> listDocente = new List<DocenteGrilla>();
            string sql = @"SELECT        Provincia.nombre as 'Nombre Provincia', Docente.legajo, Docente.apellido + ', ' + Docente.nombre as 'Apellido y Nombre', Docente.fechaNac as 'Fecha Nacimiento', Docente.email as 'E-Mail', Docente.cargaHoraria as 'Carga Horaria', Docente.dni as 'D.N.I'
                                        FROM            Docente INNER JOIN
                         Provincia ON Docente.codProvincia = Provincia.codProvincia 
                        Order by Docente.apellido, Docente.nombre";

            try
            {
                cn.Open();
                SqlCommand cmd = new SqlCommand(sql, cn);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    DocenteGrilla doc = new DocenteGrilla();
                    doc.nomProvincia = dr[0].ToString();
                    doc.legDocente = (int)dr[1];
                    doc.apeNom = dr[2].ToString();
                    doc.fechaNac = (DateTime)dr[3];
                    doc.email = dr[4].ToString();
                    doc.cargaHoraria = (int)dr[5];
                    doc.dni = (int)dr[6];
                    listDocente.Add(doc);
                }
                dr.Close();
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                throw new ApplicationException("Error BD Docente \n Problema:" + ex.Message);
            }
            return listDocente;

        }

        public static Docente ObtenerPorId(int legDocente)
        {
            Docente doc = new Docente();
            string sql = "select * from Docente where legajo = @LegDocente";
            try
            {
                cn.Open();
                cmd = new SqlCommand(sql, cn);
                cmd.Parameters.AddWithValue("@LegDocente", legDocente);
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    doc.legDocente = (int)dr["legajo"];
                    doc.nombre = dr["nombre"].ToString();
                    doc.apellido = dr["apellido"].ToString();
                    doc.fechaNac = (DateTime)dr["fechaNac"];
                    doc.email = dr["email"].ToString();
                    doc.cargaHoraria = (int)dr["cargaHoraria"];
                    doc.codProvincia = (int)dr["codProvincia"];
                    doc.dni = (int)dr["dni"];
                    doc.pass = dr["pass"].ToString();
                }
                dr.Close();
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                throw new ApplicationException("Error BD Docente. \n Problemas: " + ex.Message);
            }
            return doc;

        }

        public static void Insertar(Docente doc)
        {

            string sql = "insert into Docente (nombre,apellido,fechaNac,email,codProvincia,pass,dni) values (@nombre,@apellido,@fechaNac,@email,@codProvincia,@pass,@dni); select @@Identity as legajo;";
           
            try
            {
                cn.Open();
                cmd = new SqlCommand(sql, cn);
                cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 20).Value = doc.nombre;
                cmd.Parameters.Add("@apellido", SqlDbType.VarChar, 20).Value = doc.apellido;
                cmd.Parameters.Add("@fechaNac", SqlDbType.DateTime).Value = doc.fechaNac;
                cmd.Parameters.Add("@email", SqlDbType.Char, 30).Value = doc.email;
                cmd.Parameters.Add("@codProvincia", SqlDbType.Int).Value = doc.codProvincia;
                cmd.Parameters.Add("@pass", SqlDbType.VarChar, 50).Value = doc.pass;
                cmd.Parameters.Add("@dni", SqlDbType.VarChar, 50).Value = doc.dni;
                doc.legDocente = Convert.ToInt32(cmd.ExecuteScalar());
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                throw new ApplicationException("Error en la BD Docenete. \n Problema: " + ex.Message);
            }
            
        }

        public static void Actualizar(Docente doc)
        {

            string sql = @"update Docente set nombre = @nombre, apellido = @apellido, fechaNac = @fechaNac, email = @email, 
                                             codProvincia = @codProvincia, dni = @dni
                                             WHERE legajo = @LegDocente";
            try
            {
                cn.Open();
                cmd = new SqlCommand(sql, cn);
                cmd.Parameters.Add("@LegDocente", SqlDbType.Int).Value= doc.legDocente;
                cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 20).Value=doc.nombre;
                cmd.Parameters.Add("@apellido", SqlDbType.VarChar,20).Value= doc.apellido;
                cmd.Parameters.Add("@fechaNac", SqlDbType.DateTime).Value =doc.fechaNac;
                cmd.Parameters.Add("@email", SqlDbType.Char, 30).Value= doc.email;
                cmd.Parameters.Add("@codProvincia", SqlDbType.Int).Value= doc.codProvincia;
                cmd.Parameters.Add("@dni", SqlDbType.VarChar, 50).Value = doc.dni;
               
                cmd.ExecuteNonQuery();
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                throw new ApplicationException("Error BD Docente. \nProblemas:" + ex.Message);
            }

        }

        public static void Eliminar(int legDocente)
        {

            string sql = @"delete from Docente
                            WHERE legajo = @LegDocente";
            try
            {
                cn.Open();
                cmd = new SqlCommand(sql, cn);
                cmd.Parameters.AddWithValue("@LegDocente", legDocente);
                cmd.ExecuteNonQuery();
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                throw new ApplicationException("Error BD Docente. \n Problemas: " + ex.Message);
            }

        }
        public static bool ValidarDNI(int dni)
        {
            string sql = "select * from docente where dni = @Dni";
            cmd = new SqlCommand(sql, cn);
            cmd.Parameters.AddWithValue("@Dni", dni);
            bool valido = true;
            try
            {
                cn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    valido = false;
                }
                dr.Close();
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                throw new ApplicationException("Error BD Docente. \n Problemas: " + ex.Message);
            }
            return valido;

        }
    }
}
